#pragma once
#include "EventLoop.h"
#include "Buffer.h"
#include "Channel.h"
#include "Communication.h"
using namespace std;

// #define MSG_SEND_AUTO

class TcpConnection {
public:
	// 生成fd对应的TcpConnection对象和channel对象，将fd的TcpConnection注册到fd的channel，并将fd的channel添加到反应堆
	TcpConnection(int fd, EventLoop* evLoop);
	~TcpConnection();

	void prepareSecretKey(); // 读取公钥, 将[公钥+公钥签名]写入[写缓冲区]

	void addWriteTask(string data); // 发送数据
	void addDeleteTask();           // 断开连接

	static int processRead(void* arg);  // 通信套接字fd的读回调
	static int processWrite(void* arg); // 通信套接字fd的写回调
	static int destroy(void* arg);      // 销毁Channel及其对应的TcpConnection
private:
	EventLoop* _eventLoop;    // TcpConnection所属的反应堆模型
	Channel* _channel;        // [通信套接字的fd]对应的Channel
	Buffer* _readBuf;		  // 读缓冲区
	Buffer* _writeBuf;		  // 写缓冲区
	string _name;			  // 连接名
	Communication* _reply = nullptr;
};